import type { AxiosRequestConfig, AxiosResponse } from 'axios';
import axios from 'axios';
import { message } from 'antd';
// import { camelizeKeys } from 'humps';

export const baseURL = '';

export default baseURL;

export type ServiceResult<T> = {
  success: boolean;
  // 状态码
  code: number;
  //  消息
  msg: string;
  //  数据
  data: T;
};

const defaultConfig: AxiosRequestConfig = {
  timeout: 50000,
  withCredentials: true,
};
/** 请求拦截器 */
const requestInterceptor = (
  value: AxiosRequestConfig,
): AxiosRequestConfig | Promise<AxiosRequestConfig> => {
  const token = localStorage.getItem('token');
  if (token) {
    value.headers!['x-token'] = token;
  }
  // let saTokenValue = localStorage.getItem('saTokenValue');
  // if (saTokenValue && saTokenName) {
  //     value.headers[saTokenName] = saTokenValue;
  // }

  return value;
};

/** 响应拦截器 */
const responseInterceptor = (response: AxiosResponse<ServiceResult<any>>) => {
  // console.log("response", response);
  let info = null;
  // 因为go(protoc gen gorm) 的原因 ，所以把这边的data 的 所有 key 首字母 小写
  // if (response.data && response.headers['content-type'].includes('application/json')) {
  //   response.data.data = camelizeKeys(response.data.data);
  // }

  if (response.status != 200) {
    info = response.data.msg;
  }
  if (response.data.code != 200) {
    info = response.data.msg;
  }
  if (info) {
    message.error(info).then();
    console.error('response.request', response.request);
    console.error('info', info);
  }
  return response;
};
const axiosInstance = axios.create({
  ...defaultConfig,
  baseURL: baseURL,
});

axiosInstance.interceptors.request.use(requestInterceptor);
axiosInstance.interceptors.response.use(responseInterceptor, (error) => {
  // 服务器 出问题一般是 掉线了 ,构造一条业务 实体 传递 下去 给 响应拦截器
  const res: ServiceResult<string> = {
    code: 500,
    msg: '服务器端出现问题,请看日志',
    success: false,
    data: 'dudu',
  };
  const axiosRes: AxiosResponse<ServiceResult<string>> = {
    config: {},
    headers: {},
    status: 0,
    statusText: '',
    data: res,
  };
  // message.error("服务器端出现问题,请看日志")
  // message.error("服务器端出现问题,请看日志");
  console.error('服务器报错! error', error);
  console.error('服务器报错! error.response', error.response);
  return axiosRes;
});

export { axiosInstance };
